package middlewares

import (
	"encoding/json"
	"ginshop02/models"
	"github.com/gin-contrib/sessions"
	"github.com/gin-gonic/gin"
	"strings"
)

// InitAdminAuthMiddleware 是一个中间件函数，用于初始化管理员身份验证逻辑
// 它检查会话中是否包含用户信息，并尝试将其解析为管理员对象
// 如果解析失败或管理员列表为空，将重定向到登录页面
// 如果会话中没有用户信息，且当前请求的路径不是登录、登录处理或验证码相关的路径，也会重定向到登录页面
//
// 参数：
//
//	c *gin.Context：Gin框架的上下文对象，用于获取请求信息、设置响应等
//
// 返回值：
//
//	无返回值，此函数直接处理请求并可能重定向到登录页面
func InitAdminAuthMiddleware(c *gin.Context) {
	pathname := strings.Split(c.Request.URL.String(), "?")[0]
	session := sessions.Default(c)
	userinfo := session.Get("userinfo")

	userInfoJson, ok := userinfo.([]byte)
	if ok {
		var manager []models.Manager
		err := json.Unmarshal(userInfoJson, &manager)
		if err != nil {
			c.Redirect(302, "/admin/login")
		}
		if len(manager) > 0 {
			c.Set("manager", manager[0])
		} else {
			c.Redirect(302, "/admin/login")
		}

	} else {
		if pathname != "/admin/login" && pathname != "/admin/doLogin" && pathname != "/admin/captcha" {
			c.Redirect(302, "/admin/login")
		}

	}

}
